// // sign.js
// const JsonEncryptor = require('./jsonencryptor');

// const encrypt = async (data) => {
//     // 获取加密器实例
//     let encryptor;

//     if (typeof JsonEncryptor === 'function') {
//         encryptor = await JsonEncryptor();
//     } else if (JsonEncryptor.default) {
//         encryptor = typeof JsonEncryptor.default === 'function'
//             ? await JsonEncryptor.default()
//             : JsonEncryptor.default;
//     } else {
//         encryptor = JsonEncryptor;
//     }

//     // 确保模块完全加载
//     if (encryptor.then) {
//         encryptor = await encryptor;
//     }

//     // 验证方法存在
//     if (!encryptor.ccall) {
//         const availableMethods = Object.keys(encryptor)
//             .filter(key => typeof encryptor[key] === 'function')
//             .join(', ');
//         throw new Error(`ccall method not found. Available: ${availableMethods}`);
//     }

//     // 执行加密
//     const jsonString = JSON.stringify(data);
//     const pointer = encryptor.ccall("encryptJson", 'number', ["string"], [jsonString]);
//     const result = encryptor.UTF8ToString(pointer);

//     // 清理内存
//     if (encryptor._freeString) {
//         encryptor._freeString(pointer);
//     }

//     return result;
// };

// // 测试数据
// const testData = {
//     x: 118,
//     y: 5
// };
// const testData2 = {
//     "trail": [
//         {
//             "x": 110,
//             "y": 6,
//             "t": 1755228768034,
//             "s": 1.281,
//             "tm": 86,
//             "isd": 0
//         },
//         {
//             "x": 110,
//             "y": 6,
//             "t": 1755228768034,
//             "s": 0,
//             "tm": 0,
//             "isd": 0
//         },
//         {
//             "x": 155,
//             "y": 24,
//             "t": 1755228768041,
//             "s": 6.9238,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 218,
//             "y": 52,
//             "t": 1755228768049,
//             "s": 8.6178,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 295,
//             "y": 82,
//             "t": 1755228768057,
//             "s": 10.3297,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 372,
//             "y": 111,
//             "t": 1755228768065,
//             "s": 10.285,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 461,
//             "y": 146,
//             "t": 1755228768073,
//             "s": 11.9543,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 560,
//             "y": 189,
//             "t": 1755228768080,
//             "s": 15.4193,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 649,
//             "y": 228,
//             "t": 1755228768089,
//             "s": 10.7967,
//             "tm": 9,
//             "isd": 0
//         },
//         {
//             "x": 728,
//             "y": 266,
//             "t": 1755228768097,
//             "s": 10.958,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 796,
//             "y": 298,
//             "t": 1755228768105,
//             "s": 9.3941,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 844,
//             "y": 327,
//             "t": 1755228768113,
//             "s": 7.01,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 882,
//             "y": 350,
//             "t": 1755228768121,
//             "s": 5.5523,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 910,
//             "y": 370,
//             "t": 1755228768128,
//             "s": 4.9156,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 928,
//             "y": 418,
//             "t": 1755228768954,
//             "s": 0.0621,
//             "tm": 826,
//             "isd": 0
//         },
//         {
//             "x": 928,
//             "y": 418,
//             "t": 1755228768955,
//             "s": 0,
//             "tm": 1,
//             "isd": 0
//         },
//         {
//             "x": 906,
//             "y": 431,
//             "t": 1755228768961,
//             "s": 4.259,
//             "tm": 6,
//             "isd": 0
//         },
//         {
//             "x": 861,
//             "y": 451,
//             "t": 1755228768969,
//             "s": 6.1555,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 789,
//             "y": 476,
//             "t": 1755228768977,
//             "s": 9.5271,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 708,
//             "y": 498,
//             "t": 1755228768984,
//             "s": 11.9906,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 618,
//             "y": 513,
//             "t": 1755228768993,
//             "s": 10.1379,
//             "tm": 9,
//             "isd": 0
//         },
//         {
//             "x": 524,
//             "y": 524,
//             "t": 1755228769002,
//             "s": 10.5157,
//             "tm": 9,
//             "isd": 0
//         },
//         {
//             "x": 445,
//             "y": 535,
//             "t": 1755228769009,
//             "s": 11.3946,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 387,
//             "y": 548,
//             "t": 1755228769016,
//             "s": 8.4913,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 346,
//             "y": 553,
//             "t": 1755228769025,
//             "s": 4.5893,
//             "tm": 9,
//             "isd": 0
//         },
//         {
//             "x": 319,
//             "y": 558,
//             "t": 1755228769033,
//             "s": 3.4324,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 300,
//             "y": 562,
//             "t": 1755228769041,
//             "s": 2.4271,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 286,
//             "y": 564,
//             "t": 1755228769049,
//             "s": 1.7678,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 278,
//             "y": 564,
//             "t": 1755228769056,
//             "s": 1.1429,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 275,
//             "y": 564,
//             "t": 1755228769065,
//             "s": 0.3333,
//             "tm": 9,
//             "isd": 0
//         },
//         {
//             "x": 275,
//             "y": 563,
//             "t": 1755228769161,
//             "s": 0.0104,
//             "tm": 96,
//             "isd": 0
//         },
//         {
//             "x": 275,
//             "y": 562,
//             "t": 1755228769201,
//             "s": 0.025,
//             "tm": 40,
//             "isd": 0
//         },
//         {
//             "x": 276,
//             "y": 560,
//             "t": 1755228769209,
//             "s": 0.2795,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 280,
//             "y": 559,
//             "t": 1755228769217,
//             "s": 0.5154,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 287,
//             "y": 556,
//             "t": 1755228769225,
//             "s": 0.952,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 291,
//             "y": 553,
//             "t": 1755228769232,
//             "s": 0.7143,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 297,
//             "y": 551,
//             "t": 1755228769241,
//             "s": 0.7027,
//             "tm": 9,
//             "isd": 0
//         },
//         {
//             "x": 300,
//             "y": 550,
//             "t": 1755228769249,
//             "s": 0.3953,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 301,
//             "y": 550,
//             "t": 1755228769257,
//             "s": 0.125,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 302,
//             "y": 549,
//             "t": 1755228769265,
//             "s": 0.1768,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 303,
//             "y": 549,
//             "t": 1755228769396,
//             "s": 0.0076,
//             "tm": 131,
//             "isd": 0
//         },
//         {
//             "x": 303,
//             "y": 548,
//             "t": 1755228769417,
//             "s": 0.0476,
//             "tm": 21,
//             "isd": 0
//         },
//         {
//             "x": 309,
//             "y": 548,
//             "t": 1755228769569,
//             "s": 0.0395,
//             "tm": 152,
//             "isd": 0
//         },
//         {
//             "x": 319,
//             "y": 548,
//             "t": 1755228769577,
//             "s": 1.25,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 332,
//             "y": 548,
//             "t": 1755228769584,
//             "s": 1.8571,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 346,
//             "y": 548,
//             "t": 1755228769593,
//             "s": 1.5556,
//             "tm": 9,
//             "isd": 0
//         },
//         {
//             "x": 362,
//             "y": 548,
//             "t": 1755228769600,
//             "s": 2.2857,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 375,
//             "y": 548,
//             "t": 1755228769608,
//             "s": 1.625,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 383,
//             "y": 548,
//             "t": 1755228769616,
//             "s": 1,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 389,
//             "y": 548,
//             "t": 1755228769624,
//             "s": 0.75,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 395,
//             "y": 548,
//             "t": 1755228769632,
//             "s": 0.75,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 396,
//             "y": 548,
//             "t": 1755228769640,
//             "s": 0.125,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 399,
//             "y": 548,
//             "t": 1755228769648,
//             "s": 0.375,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 400,
//             "y": 548,
//             "t": 1755228769665,
//             "s": 0.0588,
//             "tm": 17,
//             "isd": 0
//         },
//         {
//             "x": 401,
//             "y": 548,
//             "t": 1755228769697,
//             "s": 0.0313,
//             "tm": 32,
//             "isd": 0
//         },
//         {
//             "x": 402,
//             "y": 548,
//             "t": 1755228769769,
//             "s": 0.0139,
//             "tm": 72,
//             "isd": 0
//         },
//         {
//             "x": 405,
//             "y": 548,
//             "t": 1755228769777,
//             "s": 0.375,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 406,
//             "y": 548,
//             "t": 1755228769784,
//             "s": 0.1429,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 407,
//             "y": 548,
//             "t": 1755228769792,
//             "s": 0.125,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 408,
//             "y": 548,
//             "t": 1755228769800,
//             "s": 0.125,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 409,
//             "y": 548,
//             "t": 1755228769817,
//             "s": 0.0588,
//             "tm": 17,
//             "isd": 0
//         },
//         {
//             "x": 410,
//             "y": 548,
//             "t": 1755228769833,
//             "s": 0.0625,
//             "tm": 16,
//             "isd": 0
//         },
//         {
//             "x": 413,
//             "y": 548,
//             "t": 1755228769840,
//             "s": 0.4286,
//             "tm": 7,
//             "isd": 0
//         },
//         {
//             "x": 414,
//             "y": 547,
//             "t": 1755228769848,
//             "s": 0.1768,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 415,
//             "y": 547,
//             "t": 1755228769856,
//             "s": 0.125,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 416,
//             "y": 547,
//             "t": 1755228769864,
//             "s": 0.125,
//             "tm": 8,
//             "isd": 0
//         },
//         {
//             "x": 417,
//             "y": 547,
//             "t": 1755228769900,
//             "s": 0.0278,
//             "tm": 36,
//             "isd": 0
//         },
//         {
//             "x": 418,
//             "y": 547,
//             "t": 1755228770049,
//             "s": 0.0067,
//             "tm": 149,
//             "isd": 0
//         },
//         {
//             "x": 420,
//             "y": 547,
//             "t": 1755228770201,
//             "s": 0.0132,
//             "tm": 152,
//             "isd": 0
//         },
//         {
//             "x": 421,
//             "y": 547,
//             "t": 1755228770225,
//             "s": 0.0417,
//             "tm": 24,
//             "isd": 0
//         },
//         {
//             "x": 422,
//             "y": 547,
//             "t": 1755228770240,
//             "s": 0.0667,
//             "tm": 15,
//             "isd": 0
//         },
//         {
//             "x": 421,
//             "y": 547,
//             "t": 1755228770817,
//             "s": 0.0017,
//             "tm": 577,
//             "isd": 0
//         }
//     ],
//     "click": [
//         {
//             "x": 421,
//             "y": 547,
//             "t": 1755229520643
//         }
//     ],
//     "hover": [
//         {
//             "el": "div.verify-move-block",
//             "dur": 15,
//             "t": 1755228769033
//         },
//         {
//             "el": "div",
//             "dur": 16,
//             "t": 1755228769049
//         },
//         {
//             "el": "div#captcha-modal",
//             "dur": 151,
//             "t": 1755228769065
//         },
//         {
//             "el": "div",
//             "dur": 32,
//             "t": 1755228769217
//         },
//         {
//             "el": "div.verify-move-block",
//             "dur": 327,
//             "t": 1755228769249
//         },
//         {
//             "el": "i.verify-icon.iconfont.icon-right",
//             "dur": 11,
//             "t": 1755228769577
//         },
//         {
//             "el": "div.verify-move-block",
//             "dur": 4,
//             "t": 1755228769588
//         },
//         {
//             "el": "i.verify-icon.iconfont.icon-right",
//             "dur": 12,
//             "t": 1755228769592
//         },
//         {
//             "el": "div.verify-move-block",
//             "dur": 4,
//             "t": 1755228769604
//         },
//         {
//             "el": "i.verify-icon.iconfont.icon-right",
//             "dur": 8,
//             "t": 1755228769608
//         }
//     ],
//     "slider": [],
//     "startTime": 1755228767948,
//     "endTime": 1755231032352,
//     "browser": {
//         "name": "Edge",
//         "version": "139.0.0.0"
//     },
//     "os": {
//         "name": "Windows",
//         "version": "10"
//     },
//     "screen": {
//         "resolution": {
//             "width": 1920,
//             "height": 1080
//         },
//         "colorDepth": 24,
//         "pixelDepth": 24,
//         "availableResolution": {
//             "width": 1920,
//             "height": 1032
//         }
//     },
//     "viewport": {
//         "width": 92,
//         "height": 946
//     },
//     "tqdna": "102-3ba3e85cf7961244f473eb19390ded7fce52e443ae642873b84259744e1184472f259bdb689EAA555453202572a7e250",
//     "t": 1755231032352
// }

// // 执行加密并输出结果
// encrypt(testData2)
//     .then(result => console.log('加密结果:', result))
//     .catch(error => console.error('加密失败:', error.message));
// sign.js
// sign.js
// const JsonEncryptor = require('./jsonencryptor');

// const analyzeEncryptor = async () => {
//     console.log("=== 获取加密器实例 ===");

//     try {
//         // 尝试获取实例
//         let encryptor;

//         if (typeof JsonEncryptor === 'function') {
//             encryptor = await JsonEncryptor();
//         } else if (JsonEncryptor.default) {
//             if (typeof JsonEncryptor.default === 'function') {
//                 encryptor = await JsonEncryptor.default();
//             } else {
//                 encryptor = await JsonEncryptor.default;
//             }
//         } else {
//             encryptor = JsonEncryptor;
//         }

//         console.log("实例类型:", typeof encryptor);
//         console.log();

//         // 查找所有方法
//         const allKeys = Object.keys(encryptor);
//         const functions = allKeys.filter(key => typeof encryptor[key] === 'function');

//         console.log("--- 所有函数方法 ---");
//         functions.forEach(fn => {
//             console.log(`- ${fn}:`, typeof encryptor[fn]);
//         });

//         console.log();

//         // 特别查找包含 encrypt 的方法
//         const encryptMethods = functions.filter(fn => fn.toLowerCase().includes('encrypt'));
//         console.log("--- 加密相关方法 ---");
//         encryptMethods.forEach(method => console.log(`- ${method}`));

//         console.log();

//         // 查找 ccall 相关
//         console.log("--- 重要方法检查 ---");
//         console.log("ccall:", typeof encryptor.ccall);
//         console.log("cwrap:", typeof encryptor.cwrap);
//         console.log("UTF8ToString:", typeof encryptor.UTF8ToString);
//         console.log("_malloc:", typeof encryptor._malloc);
//         console.log("_free:", typeof encryptor._free);

//         // 如果有 ccall，尝试列出导出的 C 函数
//         if (encryptor.ccall) {
//             console.log("\n--- 尝试调用加密测试 ---");
//             try {
//                 const testResult = encryptor.ccall("encryptJson", 'number', ["string"], ['{"test": "data"}']);
//                 console.log("encryptJson 调用成功，返回指针:", testResult);
//                 if (testResult && encryptor.UTF8ToString) {
//                     console.log("解析结果:", encryptor.UTF8ToString(testResult));
//                 }
//             } catch (e) {
//                 console.log("encryptJson 调用失败:", e.message);
//             }
//         }

//     } catch (error) {
//         console.error("分析失败:", error);
//     }
// };

// analyzeEncryptor();



// sign.js - 确保正确导出
const JsonEncryptor = require('./jsonencryptor');

let encryptorInstance = null;
let initPromise = null;

// 获取加密器实例（只初始化一次）
async function getEncryptor() {
    if (encryptorInstance) {
        return encryptorInstance;
    }

    if (!initPromise) {
        initPromise = JsonEncryptor.default();
    }

    encryptorInstance = await initPromise;
    return encryptorInstance;
}

// 同步加密函数
function encrypt(data) {
    if (!encryptorInstance) {
        throw new Error("请先调用 await initEncryptor() 初始化加密器");
    }

    const pointer = encryptorInstance.ccall("encryptJson", "number", ["string"], [JSON.stringify(data)]);

    if (!pointer) {
        throw new Error("加密失败，返回值为空");
    }

    const result = encryptorInstance.UTF8ToString(pointer);

    // 清理内存
    try {
        encryptorInstance.ccall("freeString", "void", ["number"], [pointer]);
    } catch (e) {
        // 忽略清理失败
    }

    return result;
}

// 初始化函数
async function initEncryptor() {
    await getEncryptor();
    console.log("✓ 加密器初始化完成");
}

// 确保这行存在且没有被注释
module.exports = { encrypt, initEncryptor };

// 注释掉或删除这部分测试代码
// (async () => {
//     await initEncryptor();
//     const result1 = encrypt({ x: 118, y: 5 });
//     const result2 = encrypt({ a: 1, b: 2 });
//     console.log("结果1:", result1);
//     console.log("结果2:", result2);
// })();